﻿#ifndef SIZEHANDLERECT_H
#define SIZEHANDLERECT_H

#include <QGraphicsRectItem>

enum SelectionHandleState { SelectionHandleOff, SelectionHandleInactive, SelectionHandleActive };

class SizeHandleRect : public QGraphicsRectItem
{
public:
    enum Direction { LeftTop , Top, RightTop, Right, RightBottom, Bottom, LeftBottom, Left , Center, None};

    /*
     * @brief   初始化并隐藏绿点。
     * @param   parent：父对象。
     *          rect：形状。
     *          dir:位置信息。
     * @retval  无*/
    SizeHandleRect(QGraphicsItem* parent , QRectF rect, Direction dir);

    /*
     * @brief   返回该点的位置信息。
     * @param   无
     * @retval  返回该点的位置信息。*/
    Direction dir() const;

    /*
     * @brief   点击测试。判断传入的点是否在该绿点的范围内。
     * @param   point：要判断的点。
     * @retval  在范围内返回true。*/
    bool hitTest( const QPointF & point );

    /*
     * @brief   移动绿点。
     * @param   x，y：目标位置。
     * @retval  无*/
    void move(qreal x, qreal y );

    /*
     * @brief   根据传入的绿点状态信息，改变绿点的工作方式。
     * @param   st：状态信息。
     * @retval  无*/
    void setState(SelectionHandleState st);
protected:

    /*
     * @brief   重写的绘画函数，由Qt框架调用。
     * @param   不解释
     * @retval  无*/
    void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget);
private:
    const Direction m_dir;          //存放点的位置信息
    SelectionHandleState m_state;   //存放点的状态信息
};

#endif // SIZEHANDLERECT_H
